package dinucleotides;

import java.util.ArrayList;
import java.util.List;

public class Collier {

	private static final int LONGUEUR = 5;

	private char[] lettres;
	private List<Character> alphabet;

	public Collier() {
		lettres = new char[Collier.LONGUEUR];
		alphabet = new ArrayList<Character>();

		alphabet.add('A');
		alphabet.add('C');
		alphabet.add('G');
		alphabet.add('T');

		for (int i = 0; i < lettres.length; i++) {
			lettres[i] = alphabet.get(0);
		}
	}

	/** Renvoie true si c'est un collier pour le code
	 * @param code
	 * @return
	 */
	public boolean test(List<String> code) {
		boolean ok = true;
		int i = 0;

		while ((i < lettres.length - 1) && ok) {
			StringBuilder paire = new StringBuilder();
			paire.append(lettres[i]);
			paire.append(lettres[i + 1]);

			if (!code.contains(paire.toString())) {
				ok = false;
			}
			i++;
		}
		return ok;
	}

	/** Passe au collier suivant, renvoie false si dernier collier
	 * @return
	 */
	public boolean next() {
		boolean done = false;
		int index;
		int i = 0;

		while (i < lettres.length && !done) {
			index = alphabet.indexOf(Character.valueOf((lettres[i])));
			if (index < alphabet.size() - 1) {// Si on est pas sur la dernière lettre
				lettres[i] = alphabet.get(index + 1);

				for (int j = 0; j < i; j++) {
					lettres[j] = alphabet.get(0);
				}
				done = true;
			}
			i++;
		}
		return done;
	}

	/* Pour transformer le collier en String
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		StringBuilder res = new StringBuilder();
		for (int i = 0; i < lettres.length; i++) {
			res.append(lettres[i]);
		}

		return res.toString();
	}
}